/*
 * Copyright (c) 2008-2021 浩瀚深度 All Rights Reserved.
 *
 * <p>FileName: RedisPool.java</p>
 *
 * @author zz
 * @date 2024/4/26
 * @version 1.0
 * History:
 * v1.0.0 2024/4/26 Create
 */
package com.jason.zax.config;

/**
 * <p>Title: RedisPool</p>
 * <p>Description: </p>
 *
 * @author zz
 */

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.util.Pool;

public class RedisPool {

    private static Pool<Jedis> jedisPool;

    public static void createPool() {
        // 创建 JedisPoolConfig 对象，可以配置连接池的各种参数
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(50); // 最大连接数
        poolConfig.setMaxIdle(10);  // 最大空闲连接数
        poolConfig.setMinIdle(5);   // 最小空闲连接数
        poolConfig.setTestOnBorrow(true); // 在 borrow 一个 jedis 实例时，是否提前进行 validate 操作

        // 创建 JedisPool 连接池
        // 参数分别是：配置对象，Redis服务器的地址，端口号，超时时间，Redis密码（如果有）
        jedisPool = new JedisPool(poolConfig, "localhost", 6379, 3000, null);
    }

    public static Pool<Jedis> getPool() {
        if (jedisPool == null) {
            createPool();
        }
        return jedisPool;
    }

    // 使用示例
    public static void main(String[] args) {
        // 获取连接池对象
        Pool<Jedis> pool = RedisPool.getPool();

        // 从连接池中获取一个 Jedis 对象
        try (Jedis jedis = pool.getResource()) {
            // 使用 Jedis 对象操作 Redis
            jedis.set("key", "value");
            String value = jedis.get("key");
            System.out.println("Get from Redis: " + value);
        } // 使用完毕后，连接会自动关闭（返回连接池）
    }
}
